home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -serious- / programming / other / whdload / rawdic17.lha / Examples / Mercenary.islave.asm < prev    next >
Assembly Source File  |  1999-03-02  |  2KB  |  89 lines

  1.  
  2.     ; Mercenary/Mercenary Compendium imager
  3.  
  4.     ; A track contains $1800 bytes of data.
  5.  
  6.     ; The format is singlesided, both sides contain the same data.
  7.  
  8.     ; track format description:
  9.  
  10.     ; sync ($A89A)
  11.     ; 4 unused bytes ($12345678)
  12.     ; 1 byte track number
  13.     ; $1800 bytes data
  14.     ; 1 word checksum
  15.  
  16.     ; The checksum is calculated by adding all data bytes to a word variable
  17.     ; which is rotated to the left every step.
  18.  
  19.     ; The MFM decoding is done by skipping all odd bits in the bitstream.
  20.  
  21.     ; Similar formats: All other Novagen games on Amiga
  22.  
  23.         incdir    Includes:
  24.         include    RawDIC.i
  25.  
  26.         SLAVE_HEADER
  27.         dc.b    1    ; Slave version
  28.         dc.b    0    ; Slave flags
  29.         dc.l    DSK_1    ; Pointer to the first disk structure
  30.         dc.l    Text    ; Pointer to the text displayed in the imager window
  31.  
  32.         dc.b    "$VER:"
  33. Text:        dc.b    "Mercenary imager V1.0",10,"by John Selck on 02.03.1999",0
  34.         cnop    0,4
  35.  
  36. DSK_1:        dc.l    0        ; Pointer to next disk structure
  37.         dc.w    1        ; Disk structure version
  38.         dc.w    DFLG_SINGLESIDE|DFLG_ERRORSWAP    ; Disk flags
  39.         dc.l    TL_1        ; List of tracks which contain data
  40.         dc.l    0        ; UNUSED, ALWAYS SET TO 0!
  41.         dc.l    FL_DISKIMAGE    ; List of files to be saved
  42.         dc.l    0        ; Table of certain tracks with CRC values
  43.         dc.l    0        ; Alternative disk structure, if CRC failed
  44.         dc.l    0        ; Called before a disk is read
  45.         dc.l    0        ; Called after a disk has been read
  46.  
  47. TL_1:        TLENTRY    1,30,$1800,$A89A,DMFM_Novagen    ; Mercenary
  48.         TLENTRY    35,63,$1800,$A89A,DMFM_Novagen    ; The 2nd City
  49.         TLEND
  50.  
  51. DMFM_Novagen:    ; Decoder for tracks in Novagens very own format.
  52.  
  53.         moveq    #0,d1
  54.         moveq    #20,d2
  55. .l0        bsr.b    NextByte
  56.         lsl.l    #8,d1
  57.         move.b    d0,d1
  58.         cmp.l    #$12345678,d1
  59.         dbeq    d2,.l0
  60.  
  61.         bsr.b    NextByte    ; skip track number
  62.  
  63.         moveq    #0,d2
  64.         move.w    #$17ff,d1
  65. .l1        bsr.b    NextByte    ; decode data
  66.         add.b    d0,d2
  67.         rol.w    #1,d2
  68.         move.b    d0,(a1)+
  69.         dbra    d1,.l1
  70.  
  71.         bsr.b    NextByte    ; compare checksum on disk
  72.         move.b    d0,d1        ; with calculated sum
  73.         bsr.b    NextByte
  74.         lsl.w    #8,d1
  75.         move.b    d0,d1
  76.         rol.w    #8,d1
  77.         cmp.w    d1,d2
  78.         bne.b    .error
  79.  
  80.         moveq    #IERR_OK,d0    ; no error
  81.         rts
  82. .error        moveq    #IERR_CHECKSUM,d0    ; checksum error
  83.         rts
  84.  
  85. NextByte:    move.w    (a0)+,d0
  86.         BITSKIP_B d0
  87.         rts
  88.  
  89.